#include <math.h>
#include <stdlib.h>
#include "point.h"

/*
 * Funkce vrací menší z hodnot a, b.
 */
int minValue(int a, int b){
	return a < b ? a : b;
}
/*
 * Funkce vrací větší z hodnot a, b.
 */
int maxValue(int a, int b){
	return a > b ? a : b;
}

/*
 * Funkce vrací faktoriál zadaného čísla.
 */
int fact(int a){
	return a == 1 ? 1 : a*fact(a-1);
}

/*
 * Funkce vrací řád zadaného čísla (tj. kolik znaků je číslo dlouhé).
 */
int getOrderOfMagnitude(int number){
	if(!number) return 1;

	return log10(abs(number)) + 1;
}

/**
 * Implementace bubble sortu pro pole struktur možností.
 * Pole nikdy nebude delší než 9 prvků, bubble sort zvolen pro malý kód a
 * paměťovou nenáročnost.
 */
void bubbleSort(Possibility *array, int length){
	int i, j;
	Possibility temp;
	for(i = length - 1; i > 0; i--){
		for(j = 0; j < i; j++){
			if(array[j].value < array[j+1].value)
			{
				temp = array[j];
				array[j] = array[j+1];
				array[j+1] = temp;
			}
		}
	}
}
